Try and be more careful about propagation of lexical environment.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 14 Dec 2010 03:37:44 +0000 (22:37 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 14 Dec 2010 03:37:44 +0000 (22:37 -0500)
commit884b8e401609fe43f9e48cb652fb8d8a327f2971
tree5a619b8fb5e1f312f3ec40ccfd37b4e43deaff62
parenta4c4689607eab67f2c9c048f2a73538fb693030e
Try and be more careful about propagation of lexical environment.
* src/eval.c (apply_lambda, funcall_lambda): Remove lexenv arg.
(Feval): Always eval in the empty environment.
(eval_sub): New function.  Use it for all calls to Feval that should
evaluate in the lexical environment of the caller.
Pass `closure's as is to apply_lambda.
(Ffuncall): Pass `closure's as is to funcall_lambda.
(funcall_lambda): Extract lexenv for `closure's, when applicable.
Also use lexical scoping for the &rest argument, if applicable.
* src/lisp.h (eval_sub): Declare.
* src/lread.c (readevalloop): Remove `evalfun' argument.
* src/print.c (Fwith_output_to_temp_buffer):
* src/data.c (Fsetq_default): Use eval_sub.
* lisp/emacs-lisp/bytecomp.el (byte-compile-condition-case): Use push.
lisp/ChangeLog
lisp/emacs-lisp/bytecomp.el
src/ChangeLog
src/bytecode.c
src/callint.c
src/data.c
src/eval.c
src/lisp.h
src/lread.c
src/minibuf.c
src/print.c